package ArchitectureStyles;

import Utils.*;

import java.util.List;
import java.util.stream.Collectors;

public class PipeFilter {
    public static String process(List<String> lines) {
        return new FirstThirdWordSwapper().process(lines);
    }

    private static class FirstThirdWordSwapper {
        public String process(List<String> lines) {
            return lines.stream()
                    .map(this::swapFirstAndThirdWord)
                    .collect(Collectors.joining("\n"));
        }

        private String swapFirstAndThirdWord(String line) {
            String[] words = line.split("\\s+", 3);
            if (words.length < 3) {
                return line;
            }
            return swap(words) + (words.length > 3 ? " " + String.join(" ", java.util.Arrays.copyOfRange(words, 3, words.length)) : "");
        }

        private String swap(String[] words) {
            return words[2] + " " + words[1] + " " + words[0];
        }
    }
    public static String principle(){
        return """
                管道-过滤器模式基本原理：
                过滤器（Filters）：
                是负责数据处理的基本单元，每个过滤器专注于执行一项特定的数据转换或分析任务。
                过滤器内部封装了完成其任务所需的全部逻辑，与其他过滤器之间仅通过标准化的接口（通常是数据流接口）进行交互。
                管道（Pipes）：
                充当连接过滤器的通道，允许数据从一个过滤器的输出流向下一个过滤器的输入。
                管道本身通常不涉及数据的处理逻辑，仅负责传递数据。
                管道-过滤器软件体系结构风格通过将数据处理过程分解为一系列独立且可重用的过滤器组件，并利用管道来串接这些组件，
                实现了数据流处理系统的模块化、可扩展和易于维护。
                这种架构尤其适用于需要对数据进行多步骤变换或分析的应用场景。""";
    }
}
